/**
 * 用户路由模块
 */

const express = require('express');
const userController = require('../controllers/userController');
const { authenticateToken } = require('../middlewares/authMiddleware');
const { checkPermission ,checkSelfOrPermission ,checkPermissionLevel} = require('../middlewares/permissionMiddleware');

const router = express.Router();

// 所有用户路由都需要认证Token
router.use(authenticateToken);

// 自助类接口（仅认证）
// 修改密码
router.put('/changepwd', userController.changePassword);

// 更新个人用户信息
router.put('/update/personal', userController.updateUserInfo);

// 数据域类接口（通用接口，需要控制范围）

// 获取当前用户信息
router.get('/info/:id', checkSelfOrPermission('user:view', { paramKey: 'id', minLevel: 20 }), userController.getUser);

// 删除单个用户（部门管理员允许单个删除同部门用户）
router.delete('/:id', checkSelfOrPermission('user:delete', { paramKey: 'id', minLevel: 20 }), userController.removeUser);

// 更新用户（可更新其他用户）
router.put('/update', checkSelfOrPermission('user:update', { paramKey: 'id', minLevel: 20 }), userController.updateUser);

// 管理类接口（需要管理员权限）
// 获取用户列表
router.get('/', checkPermission('user:list'), checkPermissionLevel(20), userController.getAllUsers);

// 创建用户
router.post('/', checkPermission('user:create'), checkPermissionLevel(20), userController.createUser);

// 批量绑定角色
router.post('/bindroles', checkPermission('user:bind:roles'), checkPermissionLevel(40), userController.bindRoles);

// 获取用户已绑定角色
router.get('/bindroles/:id', checkPermission('user:view:roles'), userController.getUserBindRoles);

// 移除角色绑定
router.delete('/role/:id', checkPermission('user:unbind:roles'), checkPermissionLevel(40), userController.removeBindRole);

// 删除多个用户
router.delete('/batch', checkPermission('user:batch:delete'), checkPermissionLevel(40), userController.removeBatchUsers);

// 重置密码
router.put('/resetpwd/:id', checkPermission('user:reset:password'), checkPermissionLevel(40), userController.resetPassword);

module.exports = router;
